本篇將開始透過實作blog來熟悉Laravel開發模式,以建立基本開發能力。本次實作將使用Laravel 5.5,請先確認PHP版本 >=7.0.8,且Apache與MySQL服務皆已開啟,再進行以下操作
今天要帶各位實作部落格的文章CRUD (Create、Read、Update、Delete),即新增、查詢、修改、刪除。而在第一篇有提到Laravel使用的是MVC架構,並使用framework提供的套件,因此程式碼的寫法與開發模式,會與撰寫傳統PHP有很大的不同。
首先,我們需建立資料庫來儲存blog的資料,那我們打開瀏覽器,在URL輸入http://localhost:8000/adminer,帳號root,密碼預設為空
此時修改專案中的「.env」,將DB相關參數修改為
DB_DATABASE=blog
DB_USERNAME=root
DB_PASSWORD=
而一篇文章至少需記錄「發文者」、「標題」與「發文內容」,所以我們需要一張文章的資料表,但以前都得使用資料庫管理工具,逐一設定欄位的名稱與其他屬性,或者利用SQL語句的「CREATE TABLE ...」建立資料表,相當麻煩,因此Laravel使用「migration」(資料遷移檔) 進行資料表的建構。這時利用Command輸入:
php artisan make:model Post -m
此時我們會看到app資料夾與database\migrations底下,分別多了「Post.php」與migration (檔名開頭為今天日期),這時打開migration定義文章資料表的結構
public function up()
{
Schema::create('posts', function (Blueprint $table) {
$table->increments('id');
$table->string('name');
$table->string('title');
$table->string('content');
$table->timestamps();
});
}
我們將這三個欄位定義為string型態 (對應資料表的VARCHAR),當然你也能為欄位修飾其屬性,如「允許空白」、「唯一」、「索引」或「預設值」
$table->string('XXX_1')->nullable();
$table->string('XXX_2')->unique();
$table->string('XXX_3')->index();
$table->integer('XXX_4')->default(1);
但不知道各位有沒有發現到一件事,我們的model為「Post」,為何資料表是「posts」呢?原因是:
migration定義完成後,在command輸入以下指令,即可自動幫我們在資料庫建構資料表
php artisan migrate
然而Laravel 5.4以後,執行migrate可能會遇到如:max key legnth...的問題,只要在app\Providers\AppServiceProvider.php中boot方法加入下列程式碼即可
public function boot()
{
\Schema::defaultStringLength(191);
}
再執行以下指令
php artisan migrate:fresh
回到資料庫就能看到資料表已經建立好了!是不是方便多了呢?
(未完待續)